/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.senac.maisconhecimento.servlet.livros;

import br.senac.maisconhecimento.dao.CategoriaDAO;
import br.senac.maisconhecimento.dao.LivroDAO;
import br.senac.maisconhecimento.entidade.Autor;
import br.senac.maisconhecimento.entidade.Categoria;
import br.senac.maisconhecimento.entidade.Livro;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Marcus Lemos
 */
@WebServlet(name = "ManterLivroServlet", urlPatterns = {"/ManterLivro"})
public class ManterLivroServlet extends HttpServlet {

    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        LivroDAO dao = new LivroDAO();
        Livro livro = ToLivro(request);
        boolean livroValido = livro != null;
        String mensagem;

        if (livroValido) {
            if (livro.getId() > 0) {
                dao.alterar(livro);
                mensagem = "Livro alterado com sucesso!";
            } else {
                dao.inserir(livro);
                mensagem = "Livro cadastrado com sucesso!";
            }
        } else
                mensagem = "Erro ao salvar o livro!";
        
        request.setAttribute("livroValido", livroValido);
        request.setAttribute("mensagem", mensagem);

        RequestDispatcher rd = request.getRequestDispatcher("livros/RespostaManter.jsp");
        rd.forward(request, response);
    }

    private Livro ToLivro(HttpServletRequest request) {
        Livro livro = null;

        int codigo = 0, isbn = 0, codigoCategoria = 0;
        String nome, nomeAutor;
        Categoria categoria = null;
        Boolean formValido = true;
        LivroDAO dao = new LivroDAO();

        try {
            codigo = Integer.parseInt(request.getParameter("codigo"));
        } catch (Exception e) {
            formValido = false;
        }

        try {
            isbn = Integer.parseInt(request.getParameter("isbn"));
        } catch (Exception e) {
            formValido = false;
        }

        try {
            codigoCategoria = Integer.parseInt(request.getParameter("categoria"));
        } catch (Exception e) {
            formValido = false;
        }

        nome = request.getParameter("nome");
        if (nome.equals("")) {
            formValido = false;
        }

        nomeAutor = request.getParameter("autor");
        if (nomeAutor.equals("")) {
            formValido = false;
        }

        if (codigoCategoria > 0) {
            CategoriaDAO categoriadao = new CategoriaDAO();
            categoria = categoriadao.consultar(codigoCategoria);
        } else {
            formValido = false;
        }

        if (formValido) {
            Autor autor = null;

            if (codigo > 0) {
                livro = dao.consultar(codigo);
            } else {
                livro = new Livro();
                autor = new Autor();
                autor.setNome(nomeAutor);
            }

            livro.setIsbn(isbn);
            livro.setNome(nome);
            livro.setAutor(nomeAutor);
            livro.setCategoria(categoria);
            livro.setAtivo(true);
        }

        return livro;
    }
}
